#ifndef LIST_H
#define LIST_H
#include<stdlib.h>
#include<stdbool.h>
#include<stdio.h>

typedef struct Node
{
	void* ptr;
	struct Node* next;
}Node;

typedef struct List
{
	Node* head;
	Node* tail;
	size_t size;

}List;

typedef int(*Cmpfp)(void*,void*);


//创建节点

Node* create_node(void* p);

//创建链表

List* create_list(void);
//销毁链表

void destory_list(List* list);

//头添加
void add_head(List* list,void* p);
//尾添加
void add_tail(List* list,void* p);
//头删除
bool del_head(List* list);


//尾删除
bool del_tail(List* list);
//删除

bool del_node(List* list,void* p,Cmpfp func);
//修改

bool modify_node(List* list,void* old,void* p,Cmpfp func);
//查询

Node* find_node(List* list,void* p,Cmpfp func);
//遍历

void show(List* list,void(*func)(void* ptr));
//排序
void sort(List* list,Cmpfp func);
#endif//LIST_H
